home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / GAMES / WALKER2 / !Walker2 / MODULES / Main < prev    next >
Text File  |  1995-02-28  |  7KB  |  617 lines

  1. ;**********************
  2. ;* ROUTINE TO DISPLAY *
  3. ;* A BACKGROUND USING *
  4. ;* FASTSPR            *
  5. ;**********************
  6.  
  7. ALIGN
  8.  
  9. #smile on
  10. #name MainCode
  11. #type &0
  12. #base &40000
  13. #load &40000
  14. #exec &40000
  15.  
  16. ; All registers up to R8 are used and preserved
  17.  
  18. #set sx=320               ; Max X Position
  19. #set sy=256-16            ; Max Y Position
  20. #set col1=23              ; Player 1 Colour
  21. #set col2=31              ; Player 2 Colour
  22. #set px1=0                ; X Pos 1
  23. #set px2=26               ; X Pos 2 
  24. #set calctime=5           ; Amount to add
  25. #set timedelay=10         ; Time delay
  26.  
  27. B Background
  28. B DisplayScore
  29. B ClearScore
  30. B AddPoints
  31. B IncreaseTime
  32. B DecreaseTime
  33. B IncreaseLives
  34. B IncreaseBombs
  35. B GetAddress
  36. B DecreaseLives
  37. B DecreaseTimer
  38. B ClearBombs
  39.  
  40. ALIGN
  41.  
  42. ;***************
  43. ;* CLEAR BOMBS *
  44. ;***************
  45.  
  46. .ClearBombs
  47. STMFD R13!,{R0-R12,R14}
  48. MOV R0,#"0"
  49.  
  50. MOV R5,#2
  51.  
  52. .loop2
  53. ADR R1,db1
  54. STRB R0,[R1,R5]
  55. ADR R1,db2
  56. STRB R0,[R1,R5]
  57. SUBS R5,R5,#1
  58. BPL loop2
  59. LDMFD R13!,{R0-R12,R15}
  60.  
  61. ALIGN
  62.  
  63. ;******************
  64. ;* DECREASE LIVES *
  65. ;******************
  66.  
  67. .DecreaseLives
  68. CMP R0,#0
  69. ADREQ R1,lives1
  70. ADRNE R1,lives2
  71.  
  72. MOV R2,#1
  73. LDRB R0,[R1,R2]
  74. SUB R0,R0,#1
  75. STRB R0,[R1,R2]
  76. MOVS R15,R14
  77.  
  78. ALIGN
  79.  
  80. ;**********************
  81. ;* GET DATA ADDRESSES *
  82. ;**********************
  83.  
  84. .GetAddress
  85. MOV R1,R0,LSL#2
  86. ADR R2,data
  87. LDR R0,[R2,R1]
  88. MOV R15,R14
  89.  
  90. ALIGN
  91. .data
  92. DCD score1,score2,lives1,lives2,db1,db2,dotime,outtime
  93.  
  94. ALIGN
  95.      
  96. ; Out of time
  97.  
  98. ALIGN
  99. .outtime
  100. DCB 0
  101.  
  102. ALIGN
  103.  
  104. ; Timer
  105.  
  106. .timedly
  107. DCD timedelay
  108.  
  109. ALIGN
  110.  
  111. ;******************
  112. ;* INCREASE BOMBS *
  113. ;******************
  114.  
  115. .IncreaseBombs
  116. STMFD R13!,{R0-R12,R14}
  117. CMP R0,#0
  118. ADREQ R0,db1
  119. ADRNE R0,db2
  120. MOV R1,#2
  121.  
  122. LDRB R2,[R0,R1]
  123. ADD R2,R2,#1
  124.  
  125. ._loop
  126. STRB R2,[R0,R1]
  127. CMP R2,#"9"+1
  128. BCC finish4
  129.  
  130. SUB R2,R2,#"9"+1
  131. ADD R2,R2,#"0"
  132. STRB R2,[R0,R1]
  133. SUBS R1,R1,#1
  134. LDRB R2,[R0,R1]
  135. ADD R2,R2,#1
  136. BPL _loop
  137.  
  138. .finish4
  139. LDMFD R13!,{R0-R12,R15}
  140.  
  141.     
  142. ALIGN
  143.  
  144. ;******************
  145. ;* INCREASE LIVES *
  146. ;******************
  147.  
  148. .IncreaseLives
  149. STMFD R13!,{R0-R12,R14}
  150. CMP R0,#0
  151. ADREQ R1,lives1
  152. ADRNE R1,lives2
  153.  
  154. MOV R2,#1
  155. LDRB R3,[R1,R2]
  156. CMP R3,#"9"
  157. BEQ _finish
  158.  
  159. ADD R3,R3,#1
  160. STRB R3,[R1,R2]
  161.  
  162. ._finish
  163. LDMFD R13!,{R0-R12,R15}
  164.  
  165. ALIGN
  166.  
  167. ;******************
  168. ;* DECREASE TIMER *
  169. ;******************
  170.  
  171. .DecreaseTimer
  172. STMFD R13!,{R0-R12,R14}
  173. LDR R0,timedly
  174. SUBS R0,R0,#1
  175. STR R0,timedly
  176. BNE finish3
  177.  
  178. MOV R0,#timedelay
  179. STR R0,timedly
  180. MOV R0,#1
  181. BL DecreaseTime
  182. LDMFD R13!,{R0-R12,R15}
  183.  
  184. ALIGN
  185.  
  186. ;*****************
  187. ;* DECREASE TIME *
  188. ;*****************
  189.  
  190. ; Registers used :
  191. ; R0 - Amount to subtract
  192.  
  193. .DecreaseTime
  194. STMFD R13!,{R0-R12,R14}
  195. MOV R5,R0
  196.  
  197. .loop4
  198. LDRB R0,dotime
  199. CMP R0,#"1"
  200. BNE nottimer
  201.  
  202. LDRB R0,dotime+1
  203. CMP R0,#"0"
  204.  
  205. MOVEQ R0,#8
  206. MOVEQ R1,#&FFF1
  207. MOVEQ R2,#150
  208. MOVEQ R3,#5
  209. SWIEQ Sound_Control
  210.  
  211. .nottimer
  212. LDRB R0,dotime
  213. CMP R0,#"0"
  214.  
  215. LDREQB R0,dotime+1
  216. CMPEQ R0,#"0"
  217. BNE _more
  218.  
  219. MOV R0,#0
  220. STRB R0,outtime
  221.  
  222. LDMFD R13!,{R0-R12,R15}
  223.  
  224. ._more
  225. LDRB R0,dotime
  226. CMP R0,#"1"
  227. BLT keep
  228. LDRB R0,dotime+1
  229. CMP R0,#"1"
  230. BLT keep
  231.  
  232. MOV R0,#8
  233. MOV R1,#0
  234. MOV R2,#0
  235. MOV R3,#0
  236. SWI Sound_Control
  237.  
  238. .keep
  239. LDRB R0,dotime+1
  240. SUB R0,R0,#1
  241. STRB R0,dotime+1
  242. CMP R0,#"0"-1
  243. BNE next2
  244.  
  245. MOV R0,#"9"
  246. STRB R0,dotime+1
  247. LDRB R0,dotime
  248. SUB R0,R0,#1
  249. STRB R0,dotime
  250.  
  251. .next2
  252. SUBS R5,R5,#1
  253. BNE loop4
  254.  
  255. .finish3
  256. LDMFD R13!,{R0-R12,R15}
  257.  
  258. ALIGN
  259.  
  260. ;*****************
  261. ;* INCREASE TIME *
  262. ;*****************
  263.  
  264. .IncreaseTime
  265. STMFD R13!,{R0-R12,R14}
  266. MOV R5,R0
  267.  
  268. .loop3
  269. LDRB R0,dotime
  270. CMP R0,#"9"
  271. BNE more
  272.  
  273. LDRB R0,dotime+1
  274. CMP R0,#"9"
  275. BEQ finish2
  276.  
  277. .more
  278. LDRB R0,dotime+1
  279. ADD R0,R0,#1
  280. STRB R0,dotime+1
  281. CMP R0,#"9"+1
  282. BNE next
  283.  
  284. MOV R0,#"0"
  285. STRB R0,dotime+1
  286. LDRB R0,dotime
  287. ADD R0,R0,#1
  288. STRB R0,dotime
  289. .next
  290. SUBS R5,R5,#1
  291. BNE loop3
  292.  
  293. .finish2
  294. LDMFD R13!,{R0-R12,R15}
  295.  
  296. ALIGN
  297.  
  298. ;**************
  299. ;* ADD POINTS *
  300. ;**************
  301.  
  302. .AddPoints
  303. STMFD R13!,{R0-R12,R14}
  304.    
  305. CMP R0,#0
  306. ADREQ R0,score1
  307. ADRNE R0,score2
  308. MOV R1,#5
  309.  
  310. LDRB R2,[R0,R1]
  311. ADD R2,R2,#2
  312. ._loop
  313. STRB R2,[R0,R1]
  314. CMP R2,#"9"+1
  315. BCC finish
  316.  
  317. SUB R2,R2,#"9"+1
  318. ADD R2,R2,#"0"
  319. STRB R2,[R0,R1]
  320. SUBS R1,R1,#1
  321. LDRB R2,[R0,R1]
  322. ADD R2,R2,#1
  323. BPL _loop
  324.  
  325. .finish
  326. LDMFD R13!,{R0-R12,R15}
  327.             
  328.  
  329. .Background
  330. STMFD R13!,{R0-R12,R14}
  331. STR R0,levelpos
  332.  
  333. MOV R0,#19
  334. SWI OS_Byte
  335.  
  336. MOV R0,#112
  337. LDR R1,bank
  338. SWI OS_Byte
  339.  
  340. MOV R0,#113
  341. LDR R1,bank
  342. SWI OS_Byte         
  343.  
  344. LDR R1,bank
  345. EOR R1,R1,#3
  346. STR R1,bank
  347.  
  348. LDR R0,bank
  349. SWI FastSpr_ScreenBank
  350.  
  351. MOV R0,#113
  352. LDR R1,bank
  353. SWI OS_Byte
  354.  
  355. MOV R0,#0
  356. SWI FastSpr_SetBackdrop
  357. MOV R0,#12
  358. SWI OS_WriteC
  359.  
  360. MOV R1,#0
  361. MOV R2,#0
  362. MOV R7,#0
  363. LDR R8,levelpos
  364.  
  365. .loop1
  366. LDRB R0,[R8,R7]
  367. CMP R0,#0
  368. CMPNE R0,#15
  369. SWINE FastSpr_Plot
  370. ._skip
  371. ADD R7,R7,#1
  372. ADD R1,R1,#16
  373. CMP R1,#sx
  374. MOVEQ R1,#0
  375. ADDEQ R2,R2,#16
  376. CMPEQ R2,#sy
  377. BNE loop1
  378. LDMFD R13!,{R0-R12,R15}
  379.  
  380. ALIGN
  381. .bank
  382. DCD 1
  383.  
  384. ALIGN
  385. .levelpos
  386. DCD 0
  387.  
  388. ALIGN
  389. .t
  390. DCB 12,17,21+128
  391.  
  392. ALIGN
  393.  
  394. ;****************
  395. ;* CLEAR SCORES *
  396. ;****************
  397.  
  398. .ClearScore
  399. STMFD R13!,{R0-R12,R14}
  400. MOV R0,#"0"
  401. MOV R5,#5
  402.  
  403. ; Clear score
  404.  
  405. ._loop
  406. ADR R1,score1
  407. STRB R0,[R1,R5]
  408. ADR R1,score2
  409. STRB R0,[R1,R5]
  410. SUBS R5,R5,#1
  411. BPL _loop
  412.  
  413.  
  414. ; Set lives
  415.  
  416. STRB R0,lives1
  417. STRB R0,lives2
  418.  
  419. ADR R1,lives1
  420. MOV R0,#"3"
  421. STRB R0,[R1,#1]
  422. ADR R1,lives2
  423. STRB R0,[R1,#1]
  424.  
  425. LDMFD R13!,{R0-R12,R15}
  426.  
  427. ;*****************************
  428. ;* DISPLAY STATUS FOR PLAYER *
  429. ;*****************************
  430.  
  431. ;Registers used :
  432. ;  R0 - Player (0 or 1)
  433. ;  R7 - Used in place of R0
  434.  
  435. ; All registers preserved
  436.  
  437. ALIGN
  438. .DisplayScore
  439. ; Set text colour
  440. STMFD R13!,{R0-R12,R14}
  441. STRB R0,which                ; Save which player
  442.  
  443. LDRB R7,which
  444. CMP R7,#0
  445. MOVEQ R0,#col1
  446. MOVNE R0,#col2
  447. STRB R0,col
  448.  
  449. ADR R0,textcolour
  450. MOV R1,#2
  451. SWI OS_WriteN
  452.  
  453. ADR R0,tintcolour
  454. MOV R1,#10
  455. SWI OS_WriteN
  456.  
  457. MOVEQ R0,#px1
  458. MOVNE R0,#px2
  459. MOV R1,#30
  460. BL MoveCursor
  461.  
  462. ADR R0,status
  463. MOV R1,#10
  464. SWI OS_Write0
  465.  
  466. LDRB R7,which
  467. CMP R7,#0
  468. MOVEQ R0,#px1
  469. MOVNE R0,#px2
  470. MOV R1,#31
  471. BL MoveCursor
  472.  
  473. CMP R7,#0
  474. ADREQ R0,score1
  475. ADRNE R0,score2
  476. SWI OS_Write0
  477.  
  478. MOV R0,#" "
  479. SWI OS_WriteC
  480.  
  481. CMP R7,#0
  482. ADREQ R0,db1
  483. ADRNE R0,db2
  484. SWI OS_Write0
  485.  
  486. MOV R0,#" "
  487. SWI OS_WriteC
  488.  
  489. CMP R7,#0
  490. ADREQ R0,lives1
  491. ADRNE R0,lives2
  492. SWI OS_Write0
  493.  
  494. MOV R0,#63
  495. STRB R0,col
  496.  
  497. ADR R0,textcolour
  498. MOV R1,#2
  499. SWI OS_WriteN
  500.  
  501. MOV R0,#17
  502. MOV R1,#30
  503. BL MoveCursor
  504.  
  505. ADR R0,time
  506. SWI OS_Write0
  507.  
  508. MOV R0,#18
  509. MOV R1,#31
  510. BL MoveCursor
  511.  
  512. ADR R0,dotime
  513. SWI OS_Write0
  514.  
  515. MOV R0,#0
  516. MOV R1,#0
  517. BL MoveCursor
  518.  
  519. LDMFD R13!,{R0-R12,15}
  520.  
  521. ;***************
  522. ;* Move Cursor *
  523. ;*************** 
  524.  
  525. ALIGN
  526. .MoveCursor
  527. STMFD R13!,{R0-R12,R14}
  528. STRB R0,cx
  529. STRB R1,cy
  530.  
  531. ADR R0,movecursor
  532. MOV R1,#3
  533. SWI OS_WriteN
  534. LDMFD R13!,{R0-R12,R15}
  535.  
  536. ;**************************
  537. ;* SET TEXT COLOUR + TINT *
  538. ;**************************
  539.  
  540. ALIGN
  541. .textcolour
  542. DCB 17
  543. .col
  544. DCB 25
  545.  
  546. ALIGN
  547. .tintcolour
  548. DCB 23,17,0,&C0,0,0,0,0,0,0
  549.  
  550. ;***************
  551. ;* MOVE CURSOR *
  552. ;***************
  553.  
  554. ALIGN
  555. .movecursor
  556. DCB 31
  557. .cx
  558. DCB 0
  559. .cy
  560. DCB 28
  561.  
  562. ALIGN
  563. .which
  564. DCB 0
  565.  
  566. ;***************
  567. ;* STATUS TEXT *
  568. ;***************
  569.  
  570. ALIGN
  571. .status
  572. DCB "SCORE: BD: LV:",0
  573.  
  574. ;******************
  575. ;* PLAYER 1 STATS *
  576. ;******************
  577.  
  578. ALIGN
  579. .score1
  580. DCB "500000",0
  581.  
  582. ALIGN
  583. .db1
  584. DCB "111",0   
  585.  
  586. ALIGN
  587. .lives1
  588. DCB "98",0
  589.  
  590. ;********
  591. ;* TIME *
  592. ;********
  593.  
  594. ALIGN
  595. .time
  596. DCB "TIME:",0
  597.  
  598. ALIGN
  599. .dotime
  600. DCB "00",0
  601.  
  602. ;******************
  603. ;* PLAYER 2 STATS *
  604. ;******************
  605.  
  606. ALIGN
  607. .score2
  608. DCB "444444",0
  609.  
  610. ALIGN
  611. .db2
  612. DCB "555",0
  613.  
  614. ALIGN   
  615. .lives2
  616. DCB "77",0
  617.